package Terminal.View.Gestori;

import java.util.ArrayList;

import javax.swing.JOptionPane;

import Terminal.View.JBarraNavigazione;
import Terminal.View.JBottoni;
import Terminal.View.JDescrizione;
import Terminal.View.JElenco;
import Terminal.View.TimeLoggingFrame;

public abstract class GestoreLavoro extends GestoreInterfaccia {

	protected JElenco elenco;
	protected JDescrizione descrizione;
	protected JBottoni bottoni;
	protected JBarraNavigazione navigazione;

	protected void visualizza() {
		
		TimeLoggingFrame.istanza().getPannello().pulisci();
		
		this.elenco = this.setElenco( getListaElenco() );
		this.descrizione = this.setDescrizioneVista();
		this.bottoni = this.setBottoniVista();
		this.navigazione = this.setBarraNavigazione();		
		
		descrizione.visualizzaElemento( this.getElementoSelezionato() );
		
		TimeLoggingFrame.istanza().getPannello().add(navigazione);		
		TimeLoggingFrame.istanza().getPannello().add(bottoni);
		TimeLoggingFrame.istanza().getPannello().add(elenco);
		TimeLoggingFrame.istanza().getPannello().add(descrizione);		
		
		TimeLoggingFrame.istanza().getPannello().validate();
		TimeLoggingFrame.istanza().getPannello().repaint();		
	}
	
	protected void cambiaVisualizzazione() {
				
		this.descrizione.visualizzaElemento( this.getElementoSelezionato() );
		this.setBarraNavigazione();
		
		TimeLoggingFrame.istanza().getPannello().pulisci();
		
		TimeLoggingFrame.istanza().getPannello().add(navigazione);		
		TimeLoggingFrame.istanza().getPannello().add(bottoni);
		TimeLoggingFrame.istanza().getPannello().add(elenco);
		TimeLoggingFrame.istanza().getPannello().add(descrizione);		
		
		TimeLoggingFrame.istanza().getPannello().validate();
		TimeLoggingFrame.istanza().getPannello().repaint();			
	}
	
	protected void nuovo() {
		
		this.bottoni = this.setBottoniForm(false);	
		this.descrizione = this.setDescrizioneForm();
		
		this.navigazione.setBottoniEnabled(false);
		this.elenco.setListaEditabile(false);
		
		TimeLoggingFrame.istanza().getPannello().pulisci();
		
		TimeLoggingFrame.istanza().getPannello().add(navigazione);	
		TimeLoggingFrame.istanza().getPannello().add(bottoni);
		TimeLoggingFrame.istanza().getPannello().add(elenco);
		TimeLoggingFrame.istanza().getPannello().add(descrizione);
	}

	protected void modifica() {
		
		if(this.getElementoSelezionato()!=null)
		{
		this.bottoni = this.setBottoniForm(true);	
		this.descrizione = this.setDescrizioneForm();
		
		this.elenco.setListaEditabile(false);
		this.navigazione.setBottoniEnabled(false);
		//System.out.println("stampa qualcosa"+this.getElementoSelezionato());
		
		descrizione.visualizzaElemento( this.getElementoSelezionato() );
		
		TimeLoggingFrame.istanza().getPannello().pulisci();
		
		TimeLoggingFrame.istanza().getPannello().add(navigazione);		
		TimeLoggingFrame.istanza().getPannello().add(bottoni);
		TimeLoggingFrame.istanza().getPannello().add(elenco);
		TimeLoggingFrame.istanza().getPannello().add(descrizione);
		}
	}
	
	protected void elimina() {
		if(this.getElementoSelezionato()!=null)
		{
			int i = JOptionPane.showConfirmDialog(TimeLoggingFrame.istanza(), "Sei sicuro di voler continuare?", 
					"ConfermaEliminazione", JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_OPTION);
			
			if (i == JOptionPane.YES_OPTION)
				this.smistaScenario("Rimuovi");
			else
				this.visualizza();
		}
		
	}		

	protected abstract ArrayList<String> getListaElenco();
	protected abstract Object getElementoSelezionato();
	
	protected abstract JElenco setElenco(ArrayList<String> stringhe);
	protected abstract JDescrizione setDescrizioneVista();
	protected abstract JDescrizione setDescrizioneForm();	
	protected abstract JBottoni setBottoniVista();
	protected abstract JBottoni setBottoniForm(boolean aggiorna);
	protected abstract JBarraNavigazione setBarraNavigazione();	
	
}
